package asposefeatures.programmingemail.readembeddedattachments.java; import com.aspose.email.Attachment; import com.aspose.email.MailMessage; import com.aspose.email.MessageFormat; public class ReadEmbeddedAttachments { private static String dataPath = "src/asposefeatures/programmingemail/readembeddedattachments/data/"; public static void main(String[] args) { try { System.out.println("Reading message with embedded messages...."); MailMessage message = MailMessage.load(dataPath + "embedded.msg", MessageFormat.getMsg()); ParseMessage(message); System.out.println("Success"); } catch (Exception ex) { System.out.println(ex.getMessage()); } System.out.println("Done."); } private static void ParseMessage(MailMessage message) { System.out.println("Subject: " + message.getSubject()); System.out.println("Extracting attachments...."); for (int i = 0; i < message.getAttachments().size(); i++) { Attachment att = (Attachment) message.getAttachments().get_Item(i); System.out.println("Attachment Name: " + att.getName()); // Get the name of attachment. If msg subject contains characters like :, /, \ etc., replace with space // because windows cannot save files with these characters // also save first 50 characters as file name to avoid long file names String attFileName = att.getName().replace(".eml", "").replace(":", " ").replace("\\", " ").replace("/", " ").replace("?", ""); if (attFileName.length() > 50) { attFileName = attFileName.substring(0, 50); } String attExt = (att.getName().substring(att.getName().lastIndexOf("."), att.getName().lastIndexOf(".") + 4)); // Save the attachment to disk att.save(dataPath + attFileName + attExt); // Check if it is an orphaned text attachment file (ATT00001.txt....) and of type eml if ((attExt.equals(".eml")) || (att.getContentType().getMediaType().equals("text/plain") && att.getName().contains(".txt") == true && att.getName().contains("ATT") == true)) { // Try to load this text file in MailMessage MailMessage attMsg = MailMessage.load(dataPath + attFileName + attExt, MessageFormat.getEml()); // Call the function recursively to parse this message and attachments ParseMessage(attMsg); } } } }